package com.easy.payment.service.impl;

import com.alibaba.fastjson2.JSON;
import com.alibaba.fastjson2.JSONObject;
import com.alipay.api.AlipayApiException;
import com.alipay.api.AlipayClient;
import com.alipay.api.AlipayConfig;
import com.alipay.api.DefaultAlipayClient;
import com.alipay.api.domain.AlipayTradePrecreateModel;
import com.alipay.api.domain.BusinessParams;
import com.alipay.api.domain.ExtendParams;
import com.alipay.api.domain.GoodsDetail;
import com.alipay.api.request.AlipayTradePrecreateRequest;
import com.alipay.api.response.AlipayTradePrecreateResponse;
import com.easy.bean.Orders;
import com.easy.bean.OrdersDetails;
import com.easy.exception.OrderOutTimeException;
import com.easy.payment.service.IPaymentService;
import com.easy.payment.service.OrderFeignService;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;

import java.util.ArrayList;
import java.util.List;

@Service
public class ZFBPaymentService implements IPaymentService {
	@Autowired
	OrderFeignService orderFS;

	@Override
	public String prePaymentByOrderID(int orderid) throws AlipayApiException ,OrderOutTimeException{
		Orders order = orderFS.getOrderByID(orderid);
		if(order.getStatus()==-1) {
			throw new OrderOutTimeException();
		}
		// 初始化SDK
		AlipayClient alipayClient = new DefaultAlipayClient(getAlipayConfig());
		// 构造请求参数以调用接口
		AlipayTradePrecreateRequest request = new AlipayTradePrecreateRequest();
		AlipayTradePrecreateModel model = new AlipayTradePrecreateModel();
		// 设置商户订单号
		model.setOutTradeNo(order.getId().toString());
		// 设置订单总金额
		model.setTotalAmount(order.getTotalprice().toString());
		// 设置订单标题
		model.setSubject("间博士黑店");
		// 设置订单附加信息
		model.setBody("刀子又亮又快");
		// 设置订单包含的商品列表信息
		List<GoodsDetail> goodsDetail = new ArrayList<GoodsDetail>();
		List<OrdersDetails> listD = order.getDetails();
		for (OrdersDetails item : listD) {
			GoodsDetail goodsDetail0 = new GoodsDetail();
			goodsDetail0.setGoodsName(item.getProductsname());
			goodsDetail0.setQuantity(item.getQuantity().longValue());
			goodsDetail0.setPrice(item.getPrice().toString());
//			goodsDetail0.setGoodsId("apple-01");
//			goodsDetail0.setGoodsCategory("34543238");
//			goodsDetail0.setCategoriesTree("124868003|126232002|126252004");
//			goodsDetail0.setShowUrl("http://www.alipay.com/xxx.jpg");
			goodsDetail.add(goodsDetail0);
		}
		model.setGoodsDetail(goodsDetail);
		// 设置业务扩展参数
//    ExtendParams extendParams = new ExtendParams();
//    extendParams.setSysServiceProviderId("2088511833207846");
//    extendParams.setSpecifiedSellerName("XXX的跨境小铺");
//    extendParams.setCardType("S0JP0000");
//    model.setExtendParams(extendParams);
		// 设置商户传入业务信息
//    BusinessParams businessParams = new BusinessParams();
//    businessParams.setMcCreateTradeIp("127.0.0.1");
//    model.setBusinessParams(businessParams);
		// 设置可打折金额
//    model.setDiscountableAmount("80.00");
//    // 设置商户门店编号
//    model.setStoreId("NJ_001");
//    // 设置商户操作员编号
//    model.setOperatorId("yx_001");
//    // 设置商户机具终端编号
//    model.setTerminalId("NJ_T_001");
		// 设置商户的原始订单号
//    model.setMerchantOrderNo("20161008001");
		request.setBizModel(model);
		request.setNotifyUrl("http://bae00f4.r23.cpolar.top/payment/success");
		// 第三方代调用模式下请设置app_auth_token
		// request.putOtherTextParam("app_auth_token", "<-- 请填写应用授权令牌 -->");
		AlipayTradePrecreateResponse response = alipayClient.execute(request);
//    System.out.println(response.getBody());
		if (response.isSuccess()) {
//        System.out.println("调用成功");
			JSONObject obj = JSON.parseObject(response.getBody());
			String resultString = obj.getString("alipay_trade_precreate_response");
			obj = JSON.parseObject(resultString);
			return obj.get("qr_code").toString();
		} else {
//        System.out.println("调用失败");
			return null;
		}
	}

	private static AlipayConfig getAlipayConfig() {
		String privateKey = "MIIEvQIBADANBgkqhkiG9w0BAQEFAASCBKcwggSjAgEAAoIBAQCtt4zbNWinILU9PkfNpGwg0PALbmkZaNnsI6eYK4XbY6wxn3NPqfGgg3NYwErpslfDNEifGREoFx0GiA1D/IvRqGSSj/S+yHqNvO+7wBqgi5w6T8hQKkiSItgz9IS5rmAWfHL5GlT2Ao+DKalQJ+J4qGDNNeepZdcmnKMPc/B+NbQ8F8/apjG0jZPhDn7VmbUTcotGVWb+X/zsn+6xrx/U3ANyAfMkTib52V5ARlCKXEx5NWqEs5vBOCRQnzf0McC6xHR3XLLnYWbU9GtLb+4Ff8GTMXT5Dl4n/nOsfMx6Emg+lII9arppwjOUG7CHdUKTHEs7l7sr0llkSOnMQpYHAgMBAAECggEBAKWmqBzIezkTiYATCalhJvLMCnr8GCBwyY3SGhiTOBuSmjrfj7fhmFW1w6JYC5d5xxKPosiDwMZ38+esiOnRwwp0ByNzPrFGvwa1qe1hLIL3XkyEk8FN8NHZhE1W19GwJFSM6536rBXDL1KlwZx7zAu+lEBbLMNuJ5HcP+mWZzgRLvXUCyxf4cJuOZwX6MhunXDaAnNlB6i8HT+OI0yTvhvQYm33U0EHRnwf3fDIaR7XSW4zznT7uE5OlLQcsnOxed3sP0MhYxfcUGzwzRKDMHVy76aBMJlVLEnZi/I2pv+mtRrEFEMfXx+xNgcXdWf3uAkk5gTez0zslCHpxmMzHRECgYEA4SpQpTLnQ9sbIcT/LuEK+UFTBCdhJCJw9cAa3UX3Qfc569wH/8/eaOkp9fFhmAvOtBl4Ijzw+TyXQCCT/82VB4il/fzbvwf8we9xIAyG1PKKNhZp69TY5FXAlONjbRRiffnxQRN4sNvM+V6jY6qLYwkkJ4bynnKk11ohZS7DQzMCgYEAxYGY48DPuUiAFikhGGPy+ytrKIVwmUkpLjSoYjcRLn4nBONyx+owtYn4Qefqt9u+j/hj+FcONUAy3cUW5mKd0JrjTD9My+MAGeBOMDAShEYoilvuXXBgzx7P6FKrgJ4i/OaSTKlejtavFPaVjf1ggTY8NWUSv1Og8KPopTXYId0CgYBJSI5q1gBzE1LnUMiFJ3V83of4aCCztAnz0gxsTCNHcwGFBF4OIkeO+aRQiblr1Rv3ffqdmhwL4m6PzoqczPpeM1ljKvMSX7UiIZ4+AhW4JSBarjzXJrVYy5gcXU206NeNjNW6im3TkhZKa0TeYVlwaD8+Jiu86i9Ab/NCjU+8BQKBgHMDaRkX6t8mzRAam18stQ521kweiNd6tzRlDblEAAlnBSnfmbO5OOw+kAcxGoo+uNX1+6FecLOp0vU6FH/M5cHYsIxyQDJq2mA3MtD07ZOBl5IavtBC5N04QDI2EhEwBYfobUGfT6U2d3ZpseWhq1UTVDRzy1sHRC1eBdhPZrExAoGAWAtXRCGJNg5Io9r8VpnMn7tYFLF4IzF+vYhoUrOf8Ijn9ERXAPhtRItvJmhO9J9YzSQ/9DfiMbMn/v+fLW+by7QwrHiY8eIdJPgiKPcnKOLey1+SOXe2FmouD+NFgxjR5vPyOgT1Lw5vpR9naqFdLzFzZttEWzKa29Che9gbMbs=";
		String alipayPublicKey = "MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEA9xSpVNvnEDMNIt4aIArSByOsYpgmpOJhwr3kVvBJkrcErW1cY26APjBGOxFj5Ng1TuBatl1W72p++h0Q6gPPp2le2kulqapdqYnPpIRFHM712Y9er3ksB3NMNnxGCXjGUSMdVWU9FI9ogBXTJxM3XIhCIidrbTofNIJ3WVmTc5ZyiICu19Fq3vW37KwGahLJgWQD+YU8IQfVwA2TzR6AplsIKgSXlTOO5mV9BCLcsHAUd1cLUSospCJPYMyphjfd3ZIgUrv/WgCCfF8rMjenp1HFe7sFyc3hZyaw66wAFPX1aPRB/h6VomglsLM4uUsimvcw1fFdU2J3Ovva3GB7hwIDAQAB";
		AlipayConfig alipayConfig = new AlipayConfig();
		alipayConfig.setServerUrl("https://openapi-sandbox.dl.alipaydev.com/gateway.do");
		alipayConfig.setAppId("9021000140673885");
		alipayConfig.setPrivateKey(privateKey);
		alipayConfig.setFormat("json");
		alipayConfig.setAlipayPublicKey(alipayPublicKey);
		alipayConfig.setCharset("UTF-8");
		alipayConfig.setSignType("RSA2");
		return alipayConfig;
	}

	@Override
	public String prePayment(Orders order) throws AlipayApiException {
		// 初始化SDK
		AlipayClient alipayClient = new DefaultAlipayClient(getAlipayConfig());
		// 构造请求参数以调用接口
		AlipayTradePrecreateRequest request = new AlipayTradePrecreateRequest();
		AlipayTradePrecreateModel model = new AlipayTradePrecreateModel();
		// 设置商户订单号
		model.setOutTradeNo(order.getId().toString());
		// 设置订单总金额
		model.setTotalAmount(order.getTotalprice().toString());
		// 设置订单标题
		model.setSubject("间博士黑店");
		// 设置订单附加信息
		model.setBody("刀子很快");
		// 设置订单包含的商品列表信息
		List<GoodsDetail> goodsDetail = new ArrayList<GoodsDetail>();
		GoodsDetail goodsDetail0 = new GoodsDetail();
		goodsDetail0.setGoodsName("ipad");
		goodsDetail0.setQuantity(1L);
		goodsDetail0.setPrice("2000");
		goodsDetail0.setGoodsId("apple-01");
		goodsDetail0.setGoodsCategory("34543238");
		goodsDetail0.setCategoriesTree("124868003|126232002|126252004");
		goodsDetail0.setShowUrl("http://www.alipay.com/xxx.jpg");
		goodsDetail.add(goodsDetail0);
		model.setGoodsDetail(goodsDetail);
		// 设置业务扩展参数
//        ExtendParams extendParams = new ExtendParams();
//        extendParams.setSysServiceProviderId("2088511833207846");
//        extendParams.setSpecifiedSellerName("XXX的跨境小铺");
//        extendParams.setCardType("S0JP0000");
//        model.setExtendParams(extendParams);
		// 设置商户传入业务信息
//        BusinessParams businessParams = new BusinessParams();
//        businessParams.setMcCreateTradeIp("127.0.0.1");
//        model.setBusinessParams(businessParams);
		// 设置可打折金额
//        model.setDiscountableAmount("80.00");
//        // 设置商户门店编号
//        model.setStoreId("NJ_001");
//        // 设置商户操作员编号
//        model.setOperatorId("yx_001");
//        // 设置商户机具终端编号
//        model.setTerminalId("NJ_T_001");
		// 设置商户的原始订单号
//        model.setMerchantOrderNo("20161008001");
		request.setBizModel(model);
		request.setNotifyUrl("http://bae00f4.r23.cpolar.top/payment/success");
		// 第三方代调用模式下请设置app_auth_token
		// request.putOtherTextParam("app_auth_token", "<-- 请填写应用授权令牌 -->");
		AlipayTradePrecreateResponse response = alipayClient.execute(request);
//        System.out.println(response.getBody());
		if (response.isSuccess()) {
//            System.out.println("调用成功");
			JSONObject obj = JSON.parseObject(response.getBody());
			String resultString = obj.getString("alipay_trade_precreate_response");
			obj = JSON.parseObject(resultString);
			return obj.get("qr_code").toString();
		} else {
//            System.out.println("调用失败");
			return null;
		}

	}

}
